const Koa = require('koa')
const path = require('path')
const content = require('./util/content')
const mimes = require('./util/mimes')
const bodyParser = require('koa-bodyparser')
const app = new Koa()

// 静态资源目录对于相对入口文件index.js的路径
const staticPath = './static'

// 解析资源类型
function parseMime(url) {
  let extName = path.extname(url)
  extName = extName
    ? extName.slice(1)
    : 'unknown'
  return mimes[extName]
}

app.use(bodyParser())

app.use(async(ctx) => {
  // 静态资源目录在本地的绝对路径

  let fullStaticPath = path.join(__dirname, staticPath)

  // 解析请求内容的类型
  let _mime = parseMime(ctx.url)

  // 获取静态资源内容，有可能是文件内容，目录，或404
  let _content = await content(ctx, fullStaticPath,_mime)

  // 如果有对应的文件类型，就配置上下文的类型
  if (_mime) {
    ctx.type = _mime
  }

  // 输出静态资源内容
  if (_mime && _mime.indexOf('image/') >= 0) {
    // 如果是图片，则用node原生res，输出二进制数据
    ctx
      .res
      .writeHead(200)
    ctx
      .res
      .write(_content, 'binary')
    ctx
      .res
      .end()
  } else if (ctx.url === '/index.html' && ctx.method === 'POST') {
    // 当POST请求的时候，中间件koa-bodyparser解析POST表单里的数据，并显示出来
    let postData = ctx.request.body
    ctx.response.body = postData
    
  } else {
    // 其他则输出文本
    ctx.body = _content
  }
})

app.listen(3000)
console.log('[demo] static-server is starting at port 3000')